package com.haixiaoke.saas.bill.service;

import com.haixiaoke.saas.bill.domain.Bill;
import com.haixiaoke.saas.common.core.domain.AjaxResult;
import com.haixiaoke.saas.common.weChat.domain.ParseParam;

import java.util.List;
import java.util.Map;

/**
 * 账单Service接口
 * 
 * @author panda
 * @date 2025-06-26
 */
public interface IBillService {
    /**
     * 查询账单
     * 
     * @param billId 账单主键
     * @return 账单
     */
    Bill selectBillByBillId(String billId);

    /**
     * 查询账单列表
     * 
     * @param bill 账单
     * @return 账单集合
     */
    List<Bill> selectBillList(Bill bill);

    /**
     * 新增账单
     * 
     * @param bill 账单
     * @return 结果
     */
    AjaxResult insertBill(Bill bill);

    /**
     * 修改账单
     * 
     * @param bill 账单
     * @return 结果
     */
    int updateBill(Bill bill);

    /**
     * 批量删除账单
     * 
     * @param billIds 需要删除的账单主键集合
     * @return 结果
     */
     int deleteBillByBillIds(String[] billIds);

    /**
     * 删除账单信息
     * 
     * @param billId 账单主键
     * @return 结果
     */
     int deleteBillByBillId(String billId);

    /**
     * 完成账单 未付款->已付款
     * @param bill
     * @return
     */
    AjaxResult completed(Bill bill);

    /**
     * 取消账单 未付款->已取消
     * @param billId
     * @param username
     * @return
     */
    AjaxResult cancel(String billId, String username);

    /**
     * 支付账单
     * @param billId 账单id
     * @return
     */
    AjaxResult payBill(String billId, Long userId, String payType);

    /**
     * 微信支付回调
     * @param parseParam
     */
    void weChatCallbackBillPay(ParseParam parseParam);

    List<Map<String, Object>> homePage();
}
